var express = require('express');
var router = express.Router();
var utils = require('../functions/utils');

router.post('/', function(req,res)
{
/*
	Input parameters 

	 *  	sessionId			인증을 위한 session
	 *		keyword		검색어

	 *  	userCount			유저 리스트 조회 수 (default 10)
	 *		direction			조회방향 (-1 : prev , 1 : after , else : top)
	 *		baseUserKey			기준 userkey (directoion -1 : objKey < base , 1 : objKey > base , else : null)

	 *  	articleCount		유저마다 아티클 개수
*/

	var sessionId = req.body.sessionId;					utils.checkParamValue('sessionId' , sessionId);
	var keyword = req.body.keyword;						utils.checkParamValue('keyword' , keyword);

	var userCount = req.body.userCount;					utils.checkParamValue('userCount' , userCount);
	var direction = req.body.direction;					utils.checkParamValue('direction' , direction);
	var baseUserKey = req.body.baseUserKey;				//utils.checkParamValue('baseUserKey' , baseUserKey);

	var articleCount = req.body.articleCount;			utils.checkParamValue('articleCount' , articleCount);

	utils.callLog(req);

	//utils.sessionTraceLog(req);

	//  이미지는 다 작은 사이즈 
	var profilePicSizeId = 2;	
	var thumbSizeId = 2;

	keyword = keyword.replace(/[+\-*<>()~"@\\%?]/gi, ' '); // fulltext 에서 사용하는특수문자 제거 - 공백문자로 변환  

	var list = keyword.split(' ');	// 공백문자로 키워드 구분 
	keyword = '';

	var keywordCount = 0;
	// 키워드 개수가 많을 경우 디비 처리시간 오래걸린다 - 3자 이상의 3개로 제한한다.
	for(var i = 0 ; i < list.length && keywordCount <3  ; i ++)
	{
		if(list[i].length >= 3)
		{
			keyword += '+'+list[i]+'* ';	// 항목 필수 ,prefix 매칭
			keywordCount ++;
		}
	}

	if(keyword.length > 0)
	{
		// 읽기만 하니 replica
		global.replica_db.connection.getConnection(function(err,connection)
		{
			var input_param = [sessionId , keyword , userCount , profilePicSizeId , direction , baseUserKey , articleCount , thumbSizeId , global.config.storage.download.url];

			var sql = 'call api_searchUser(? , ? , ? , ? , ? , ? , ? , ? , ?)';

			var query = connection.query(sql, input_param , function (err, rows) 
			{
				connection.release();

				if(err)
				{
					throw err;
				}

				// 없어도 에러는 아님.
				var ret = {'code' : 200 };

				// 결과가 있을 경우
				if(utils.isValidArray(rows[0]))
				{
					// user id , contentsCount 없앤다. 
					for(r = 0 ; r < rows[0].length ; r ++)
					{
						delete	rows[0][r].userId;
						delete	rows[0][r].contentsCount;
					}
					ret.body = rows[0];
				}

				res.json(ret);
				res.end();

			}); // call api_searchUser

		}); // getConnection
	} //keyword.length() > 0
	else
	{
		// 없어도 에러는 아님.
		var ret = {'code' : 200 };
		res.json(ret);
		res.end();
	}
	
});

module.exports = router;